extends PanelContainer
class_name 地面卡牌区类
const 卡牌堆场景=preload("res://卡牌堆/卡牌堆.tscn")
@onready var 卡牌堆容器 = %"卡牌堆容器"

signal 卡牌被托起(drag数据)
@export_enum("普通物品","区域物品") var 物品类型:String
	
var 卡牌区数据:卡牌区数据类:
	set(value):
		卡牌区数据=value
		卡牌区数据.添加空卡牌堆.connect(当添加空卡牌堆)
		卡牌区数据.卡牌堆已清空.connect(当卡牌堆已清空)
		卡牌区数据.插入卡牌堆.connect(当插入卡牌堆)
		初始化卡牌区显示()
	
func 当卡牌堆已清空(卡牌堆数据:卡牌堆数据类):
	for 卡牌 in 卡牌堆容器.get_children():
		if 卡牌.卡牌堆数据==卡牌堆数据:
			卡牌堆容器.remove_child(卡牌)
	
func 当添加空卡牌堆(卡牌堆数据:卡牌堆数据类):
	添加数据到空卡牌堆(卡牌堆数据)
	
func 当插入卡牌堆(_index:int):
	初始化卡牌区显示()
	
func 初始化卡牌区显示():
	for 卡牌堆 in 卡牌堆容器.get_children():
		卡牌堆容器.remove_child(卡牌堆)
		卡牌堆.queue_free()
	
	for 卡牌堆数据 in 卡牌区数据.卡牌区数据:
		添加数据到空卡牌堆(卡牌堆数据)
		
func 添加数据到空卡牌堆(卡牌堆数据:卡牌堆数据类):
	var 卡牌堆=卡牌堆场景.instantiate()
	卡牌堆.背景色=Color.PEACH_PUFF
	卡牌堆容器.add_child(卡牌堆)	
	卡牌堆.显示左间隔.connect(当显示左间隔)
	卡牌堆.隐藏左间隔.connect(当隐藏左间隔)
	卡牌堆.插入卡牌.connect(当插入卡牌)
	卡牌堆.添加卡牌失败.connect(当添加卡牌失败)
	卡牌堆.卡牌堆数据=卡牌堆数据
	return 卡牌堆
	
func 当显示左间隔(index):
	if index<卡牌堆容器.get_child_count():
		var 卡牌堆=卡牌堆容器.get_child(index)
		卡牌堆._显示左间隔()

func 当隐藏左间隔(index):
	if index<卡牌堆容器.get_child_count():
		var 卡牌堆=卡牌堆容器.get_child(index)
		卡牌堆._隐藏左间隔()
			
func 当插入卡牌(卡牌:卡牌数据类):
	var 卡牌堆数据:卡牌堆数据类=卡牌堆数据类.new()
	卡牌堆数据.添加卡牌(卡牌)
	添加数据到空卡牌堆(卡牌堆数据)
	
func 获取卡牌堆(卡牌堆数据:卡牌堆数据类):
	for 卡牌堆 in 卡牌堆容器.get_children():
		if 卡牌堆 is 卡牌堆类 and 卡牌堆.卡牌堆数据==卡牌堆数据:
			return 卡牌堆.卡牌堆
	return null

func 添加卡牌(卡牌数据:卡牌数据类):
	if 卡牌数据.主类型==物品类型:
		卡牌区数据.添加卡牌(卡牌数据)
		
func 当添加卡牌失败(卡牌数据:卡牌数据类):
	if 卡牌数据.主类型==物品类型:
		卡牌区数据.添加卡牌(卡牌数据)	

func 包含卡牌(卡牌数据:卡牌数据类):
	for 卡牌堆 in 卡牌堆容器.get_children():
		if 卡牌堆 is 卡牌堆类 and 卡牌堆.包含卡牌(卡牌数据):
			return 卡牌堆
	return null
